今天深入接触了 Python 中的函数,发现函数比我想象的要高深。
Python 中万物皆对象,这一章就介绍了函数作为对象的一些属性。首先是测试所有对象共有的属性__doc__
,可以看到它是function
类的实例。然后是变量赋值、作为参数传递。这些概念虽然之前也知道,但是还没怎么用过,偶尔在key
关键字参数的地方使用。
之后就是高阶函数了。有接触过函数式语言,所以现在看起来还是没难度的。介绍的几个高阶函数有内置的map
、filter
和sorted
函数,functools
模块中的reduce
。而map
、filter
和reduce
函数在 Python 中有了更好的替代——列表推导和生成器表达式。
Python 中,匿名函数由lambda
关键字创建,它的定义体只能使用纯表达式。
可调用对象即能被调用运算符(()
)应用的对象,可使用内置的callable
函数检测。
当一个对象实现了__call__
方法,它就是一个函数类对象,可被调用。函数还是跟普通的类有所不同,它有一些独有的属性,比如__defaults__
。
Python 的参数处理机制有三个比较有趣,一个是新增的仅限关键字参数,另外两个是定位参数,*
和**
展开可迭代对象映射到单个参数,其中**
映射的是字典,仅限关键字参数表示只能通过关键字来指定,且只能放到*
后面。可放一个*
只支持仅限关键字参数。
函数的三个属性__defaults__
、__kwdefaults__
和__code__
放置了函数对象参数的一些信息。而使用inspect
模块中的signature
更加方便。
函数注解「用于为函数声明中的参数和返回值附加元数据」,它存储在函数的__annotations__
属性中。
最后介绍了两个包operator
和functools
,用于支持函数式编程风格。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。